package datosClient;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Daniela
 */
import java.util.*;
import java.lang.Math;

public class ListaPieza {
    private Set <Pieza> piezas;


    public ListaPieza() {
        piezas = new HashSet();
    }

    public Set<Pieza> getPiezas() {
        return piezas;
    }

    public void setPiezas(Set<Pieza> piezas) {
        this.piezas = piezas;
    }



    public boolean agregarElemento(Pieza objeto){
        return piezas.add(objeto);

    }

     public void imprimirColeccion()
     {
        int i;
        Pieza registro;

        /*
         * Se define un arreglo de tipo Object (la clase genérica Java)
         */
        Object [] arreglo;

        /*
         * Se convierte la colección pasada como parámetro a un array, que
         * es asignado al arreglo de tipo Object
         */
        arreglo = piezas.toArray();

        System.out.println("DATOS");

        /*
         * Se hace un recorrido del arreglo de tipo Object y se imprime
         * la información de la casilla i
         */
        for(i=0 ; i<arreglo.length ; i++)
        {
            registro = (Pieza) arreglo[i];
            System.out.println("X: " + registro.getX());
            System.out.println("Y: " + registro.getY());
            System.out.println("esX: " + registro.isEsX());
            System.out.println("esY: " + registro.isEsY());
            System.out.println("esta en el tablero: " + registro.isEstaY());
            System.out.println();
        }

        System.out.println("\n\n");


    }

    /* Funcion que inicializa las piezas con un valor del 0 al 6   */
    public ListaPieza inicializarPiezas(){
        int i, j, cont;
        cont = 0;

        Pieza pieza;
        
                for (i = 0; i <= 6; i++){
                    if (i >= 1)
                        cont = i;
                    for (j = cont; j <= 6; j++){
                         pieza = new Pieza(i,j,false,false,false);
                         this.agregarElemento(pieza);                           
                    }
                }
        return this;
    }


    public boolean removerElemento(Pieza objeto)
    {
        boolean encontrado = false;
        Pieza auxiliar = null;

        /*
         * Se define un iterador inicializado con el iterador de la colección
         */
        Iterator iterador = piezas.iterator();
        //System.out.println("valor del iterador = \n\n" + iterador);

        /*
         * Mientras no se encuentre el elemento y existan mas elementos en la
         * colección, se sigue entrando en el ciclo
         */
        while (!encontrado && iterador.hasNext())
        {
            /*
             *  Se obtiene el siguiente objeto del iterador y se le hace un cast
             *  para asignarlo al objeto de tipo Nodo
             */
            auxiliar = (Pieza) iterador.next();
            //System.out.println("auxiliar = " + auxiliar);
            //System.out.println("objeto = " + objeto);
            /*
             * Se invoca al método equals de la clase Nodo para determinar si son
             * iguales. En caso de serlo, se encontró el elemento buscado
             */
            if (objeto.equals(auxiliar))
                encontrado = true;
        }

        /*
         * Si se encontró el elemento, se procede a ejecutar el remove
         */
        //System.out.println("lo encontro = " + encontrado);
        if (encontrado)
        {
            
            if (piezas.remove(auxiliar))
                return true;
        }

        return false;
    }



    public Pieza obtenerObjetoDeLaCasilla(int posicion){
        Pieza objeto, aux;
        int i = 0;
        aux = objeto = null;
        Iterator iterador = piezas.iterator();
               
        //System.out.println("\n\n\nposicion = " + posicion);
        while (i <= posicion) {
           aux = (Pieza) iterador.next();
           //System.out.println("aux---> " + aux +  "i = " + i);
           objeto = new Pieza(aux.getX(),aux.getY(),aux.isEsX(),aux.isEsY(),aux.isEstaY());
           //System.out.println("objeto---> " + objeto);
           i++;
        }
        //System.out.println("objeto---> " + objeto);
        return objeto;
        
    }


    public ListaPieza generarPiezasAleatorias(){
        int cont, posicion;
        Pieza pieza = null;
        boolean valor = false;
        ListaPieza piezasJugador = new ListaPieza();
        posicion = 0;
        cont = 1;

        while (cont <= 7) {
             posicion = (int) (Math.random() * piezas.size());
             pieza = obtenerObjetoDeLaCasilla(posicion);
             //System.out.println("tamaño de piezas " + piezas.size());
             //System.out.println("pieza---> " + pieza);
             piezasJugador.agregarElemento(pieza);
             valor = this.removerElemento(pieza);
            /* if (valor == true)
                 System.out.println("Si se borro\n");
             else
                 System.out.println("No se borro\n");
             *
             */
             cont++;
        }

        return piezasJugador;

    }


}




